package com.xkcyy.climb.core.enums;

/**
 * TextValueEnum
 *
 * @author yuand
 * @date 2021/6/24
 **/
public interface ValueEnum<TEnum extends Enum<TEnum>, TValue> {
    /**
     * 获取值
     *
     * @return 值
     */
    TValue getValue();

    /**
     * 枚举转换
     *
     * @param tTargetClass 目标class
     * @param <TTarget> 目标class
     * @return 目标枚举
     */
    default <TTarget extends Enum<TTarget> & ValueEnum<TTarget, TValue>> TTarget to(Class<TTarget> tTargetClass) {
        TValue value = this.getValue();
        for (TTarget item : tTargetClass.getEnumConstants()) {
            if (item.getValue() != null && value != null) {
                if (item.getValue().equals(value)) {
                    return item;
                }
            }
        }
        return null;
    }


}
